package com.partsoft.dits;


/**
 * 集成边界描述符注册表接口
 */
public interface DataDescriptorRegistry<E extends DataEdgeDescriptor> extends DescriptorRegistry<E> {
	
	/**
	 * 支持的描述符类
	 */
	Class<E> getSupportClass();

	/**
	 * 获得所有的描述符
	 */
	E[] getDescriptors();
	
	/**
	 * 获得所有的描述符
	 */
	E[] getDescriptors(DescriptorAccepter<E> accepter);
	
	/**
	 * 根据消息代码获取边界描述符
	 * @param messageCode 消息代码
	 */
	E[] getDescriptors(String messageCode);

	/**
	 * 根据消息代码获取边界描述符
	 * @param messageCode 消息代码
	 * @param accepter 接收器
	 */
	E[] getDescriptors(String messageCode, DescriptorAccepter<E> accepter);
	
	/**
	 * 根据描述符ID获取描述符
	 * @return
	 * @exception RuntimeException 如果找不到则抛出异常
	 */
	E getDescriptor(String id) throws RuntimeException;
	
	/**
	 * 根据数据类和ID获取
	 * @param clazz
	 * @param id
	 * @return
	 */
	E getDescriptor(Class<E> clazz, String id);
	
	/**
	 * 根据消息代码返回描述符总数
	 * @param messageCode 消息代码
	 * @return 个数
	 */
	int countDescriptor(String messageCode);
	
	/**
	 * 根据消息代码返回描述符总数
	 * @param messageCode 消息代码
	 * @param accepter 接受器
	 * @return 个数
	 */
	int countDescriptor(String messageCode, DescriptorAccepter<E> accepter);
	
	/**
	 * 判断是否有指定的消息存在的描述符
	 * @param messageCode 消息代码
	 * @return true表示有
	 */
	boolean hasMessageCode(String messageCode);
	
	/**
	 * 判断是否有指定的消息存在的描述符
	 * @param messageCode 消息代码
	 * @param accepter 接受器
	 * @return true表示有
	 */
	boolean hasMessageCode(String messageCode, DescriptorAccepter<E> accepter);
	

	/**
	 * 判断指定ID的描述符是否存在
	 * @param id 描述符ID
	 */
	boolean hasDescriptor(String id);
	
}
